package com.ssy.lingxi.contract.service;

import com.ssy.lingxi.common.model.dto.UserLoginCacheDTO;
import com.ssy.lingxi.common.response.PageData;
import com.ssy.lingxi.common.response.Wrapper;
import com.ssy.lingxi.contract.api.model.vo.request.ContrPriceQueryRequest;
import com.ssy.lingxi.contract.api.model.vo.request.ContractOrderMaterielRequest;
import com.ssy.lingxi.contract.api.model.vo.request.PurchaseMaterielPriceRequestVO;
import com.ssy.lingxi.contract.api.model.vo.response.PurchaseMaterielPriceVO;
import com.ssy.lingxi.contract.entity.ContractPurchaseMaterielDO;
import com.ssy.lingxi.contract.model.vo.common.request.PurchaseMaterielPageVO;
import com.ssy.lingxi.contract.model.vo.common.response.PurchaseMaterielQueryVO;
import com.ssy.lingxi.contract.model.vo.coordination.request.AssociatedGoodsUpdateVO;
import com.ssy.lingxi.contract.model.vo.manage.request.PurchaseMaterielUpdateVO;

import java.util.List;

/**
 * 合同采购物料接口定义
 * @author 伍将
 * @date 2021/2/8
 * @version 2.0.0
 */
public interface IContractPurchaseMaterielService {

    /**
     * 分页查询合同采购物料
     * @author 伍将
     * @date 2021/2/8
     * @param user: 当前登录用户
     * @param pageVO: 分页查询请求参数
     * @return 操作结果
     **/
    Wrapper<PageData<PurchaseMaterielQueryVO>> pageList(UserLoginCacheDTO user, PurchaseMaterielPageVO pageVO);

    /**
     * 保存合同采购物料
     * @author 伍将
     * @date 2021/2/25
     * @param contractId: 合同id
     * @param purchaseMaterielList: 采购物料
     * @return 操作结果
     **/
    Wrapper<Void> save(Long contractId, List<PurchaseMaterielUpdateVO> purchaseMaterielList);

    /**
     * 更新采购物料
     * @author 伍将
     * @date 2021/3/2
     * @param updateVO: 更新请求参数
     * @return 操作结果
     **/
    Wrapper<Void> update(AssociatedGoodsUpdateVO updateVO);

    /**
     * 校验合同-是否已全部关联商品
     * @param contractId
     * @return
     */
    Boolean checkContractAssociatedGoods(Long contractId);

    /**
     * 根据合同id删除采购物料
     * @author 伍将
     * @date 2021/3/3
     * @param contractId: 合同id
     * @return 操作结果
     **/
    Wrapper<Void> deleteByContractId(Long contractId);

    /**
     * 查询采购物料单价
     * @author 伍将
     * @date 2021/3/19
     * @param requestVO: 请求参数
     * @return 操作结果
     **/
    Wrapper<List<PurchaseMaterielPriceVO>> getPriceList(PurchaseMaterielPriceRequestVO requestVO);

    /**
     * 更新合同物料数量
     * @param contractId
     * @param contractOrderMaterielRequestList
     * @param type
     */
    void updateContractPurchaseMaterielCount(Long contractId, List<ContractOrderMaterielRequest> contractOrderMaterielRequestList, Integer type);

    /**
     * 根据物料编码查询物料合同信息
     * @param request 物料信息
     * @return 物料合同信息
     */
    List<ContractPurchaseMaterielDO> selectGoods(ContrPriceQueryRequest request);

    /**
     * 根据物料编码查询物料合同信息
     * @param contractId 合同id
     * @return 物料合同信息
     */
    List<ContractPurchaseMaterielDO> selectGoodsByContractId(Long contractId);
}
